package com.mask.common.redis.utils;

import com.mask.common.redis.service.RedisService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;

import java.util.Collection;
import java.util.List;
import java.util.Map;
import java.util.concurrent.TimeUnit;
import java.util.function.Supplier;

@Component
public class RedisUtils {
    @Autowired
    private RedisService redisService;

    /**
     * 构建缓存key
     */
    public static String buildKey(String... keys) {
        return String.join(":", keys);
    }

    /**
     * 获取缓存，如果不存在则调用方法获取并缓存
     */
    public <T> T getOrSet(String key, Supplier<T> supplier, long timeout, TimeUnit unit) {
//        T value = redisService.get(key);
//        if (value != null) {
//            return value;
//        }
//
//        value = supplier.get();
//        if (value != null) {
//            redisService.set(key, value, timeout, unit);
//        }
        return (T) key;
    }

    /**
     * 批量获取缓存
     */
    public <T> List<T> multiGet(Collection<String> keys) {
//        return redisService.get(keys);
        return null;
    }

    /**
     * 批量设置缓存
     */
    public void multiSet(Map<String, Object> map, long timeout, TimeUnit unit) {
//        map.forEach((key, value) -> redisService.set(key, value, timeout, unit));
    }

    /**
     * 递增
     */
    public long incr(String key, long delta) {
//        return redisService.increment(key, delta);
        return 0;

    }

    /**
     * 递减
     */
    public long decr(String key, long delta) {

//        return redisService.increment(key, -delta);
        return 0;

    }
}

// @Service
// public class UserService {
//     @Autowired
//     private RedisService redisService;
    
//     @Autowired
//     private RedisUtils redisUtils;

//     /**
//      * 使用分布式锁
//      */
//     @RedisLock(key = "'user:lock:' + #userId")
//     public void updateUser(Long userId, UserDTO userDTO) {
//         // 更新用户信息
//     }

//     /**
//      * 使用缓存
//      */
//     public UserVO getUser(Long userId) {
//         String key = RedisUtils.buildKey("user", "info", userId.toString());
//         return redisUtils.getOrSet(key, () -> {
//             // 从数据库查询用户信息
//             return userVO;
//         }, 1, TimeUnit.HOURS);
//     }

//     /**
//      * 手动使用分布式锁
//      */
//     public void processOrder(Long orderId) {
//         RLock lock = redisService.getLock("order:lock:" + orderId);
//         try {
//             boolean isLocked = lock.tryLock(1, 5, TimeUnit.SECONDS);
//             if (!isLocked) {
//                 throw new RuntimeException("获取锁失败");
//             }
//             // 处理订单
//         } catch (InterruptedException e) {
//             Thread.currentThread().interrupt();
//         } finally {
//             if (lock.isHeldByCurrentThread()) {
//                 lock.unlock();
//             }
//         }
//     }
// }